package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import modelo.facade.Fachada;

import vista.VentanaCategoria;
import modelo.Categoria;
import modelo.memento.Caretaker;

public class ControladorVentanaCategoria implements ActionListener {

	private VentanaCategoria ventanaCategoria;
	private Fachada fachada = new Fachada();
	private Caretaker caretaker = new Caretaker();

	public ControladorVentanaCategoria() {
		super();
		ventanaCategoria = VentanaCategoria.getInstancia();
		ventanaCategoria.setVisible(true);	
		ventanaCategoria.addListener(this);	
		ventanaCategoria.setCodigoCategoria("0"+String.valueOf(fachada.generarCodigoCategoria()));
	}
	
	private void guardarCategoria(){
		  	try
			{
		    	if(ventanaCategoria.getCodigoCategoria().equals("")|| 
		    			ventanaCategoria.getNombreCategoria().equals("") || 
		    			ventanaCategoria.getDescripcion().equals(""))
		    			ventanaCategoria.mostrarMensaje("Debe llenar todos los datos para poder registrar una categoria");
		    	else
		    	{
		    		String codigo = ventanaCategoria.getCodigoCategoria();
		    		String nombre = ventanaCategoria.getNombreCategoria();
		    		String descripcion = ventanaCategoria.getDescripcion();
		    		int status=1;
		    		Categoria categoria = new Categoria(codigo, nombre, descripcion, status); 
			        
		    		fachada.registarCategoria(categoria);
		    		caretaker.addMemento(categoria.saveToMemento());
			        
			        ventanaCategoria.mostrarMensaje("La Categoria fue registrado con exito");
			        ventanaCategoria.borrarDatos();
					int numero = Integer.parseInt(ventanaCategoria.getCodigoCategoria())+1;
			        ventanaCategoria.setCodigoCategoria("0"+String.valueOf(numero));
		    	}
			}catch(Exception e)
			{
				ventanaCategoria.mostrarMensaje("No se pudo registrar la categoria, verifique que los datos sean correctos");
				ventanaCategoria.borrarDatos();
			}
	}
	
	private void deshacer() {
		if(caretaker.getUltimo() == -1)
			ventanaCategoria.mostrarMensaje("No se han realizados cambios. No es posible deshacer!");
		else{
			Categoria.restoreFromMemento(caretaker.getMemento(caretaker.getUltimo()));
			ventanaCategoria.setCodigoCategoria(Categoria.getCodigocategoria());
			ventanaCategoria.setDescripcion(Categoria.getDescripcion());
			ventanaCategoria.setNombre(Categoria.getNombre());
			ventanaCategoria.habilitarModificar();
			ventanaCategoria.deshabilitarGuardar();
        }
	}
	
	private void modificar(){
		String codigo = ventanaCategoria.getCodigoCategoria();
		String nombre = ventanaCategoria.getNombreCategoria();
		String descripcion = ventanaCategoria.getDescripcion();
		
		fachada.actualizarCategoria(codigo, nombre, descripcion);
		
		ventanaCategoria.habilitarGuardar();
		ventanaCategoria.deshabilitarModificar();
		ventanaCategoria.borrarDatos();
		ventanaCategoria.mostrarMensaje("Categoria modificada");
		int numero = Integer.parseInt(ventanaCategoria.getCodigoCategoria())+1;
        ventanaCategoria.setCodigoCategoria("0"+String.valueOf(numero));
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		String actionCommand = e.getActionCommand();
		if (actionCommand.equals("Guardar")){
			guardarCategoria();
		}
		else if (actionCommand.equals("Cancelar")) {
			ventanaCategoria.borrarDatos();
		}
		else if (actionCommand.equals("Deshacer")){
            deshacer();
		}
		else if (actionCommand.equals("Modificar")){
			modificar();
		}
		else if (actionCommand.equals("Salir")){
			this.ventanaCategoria.setVisible(false);
		}
	}
	
	

	
}